package cl.mt.data;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Collection;
import java.util.LinkedList;

import cl.mt.dto.DTOOfertaCarga;
import cl.mt.util.bd.DatosTabla;
import cl.mt.util.bd.Parametro;

public class DataOfertaCarga extends DatosTabla {
	private static final String sqlGetId = "SELECT MAX(ID)+1 AS IDX FROM MT.MST_OFERTAS_CARGA";
	private static final String sqlFindByPK = "SELECT ID, USR_ID, PLT_ID, RMT_ID, CAT_ID, CIU_ORG_ID, CIU_DST_ID, VHT_ID, UNI_ID, FECHA_DESDE, FECHA_HASTA, FECHA_PUBLICACION, DETALLE_CARGA, ELIMINADO, NUMERO_VIAJES, PRECIO_REFERENCIAL, ESPECIFICACION_ENTREGA, MOT_ID, CANTIDAD, MERCADERIA, FECHA_CADUCIDAD FROM MT.MST_OFERTAS_CARGA where ID=?";
	private static final String sqlFindAll = "SELECT ID, USR_ID, PLT_ID, RMT_ID, CAT_ID, CIU_ORG_ID, CIU_DST_ID, VHT_ID, UNI_ID, FECHA_DESDE, FECHA_HASTA, FECHA_PUBLICACION, DETALLE_CARGA, ELIMINADO, NUMERO_VIAJES, PRECIO_REFERENCIAL, ESPECIFICACION_ENTREGA, MOT_ID, CANTIDAD, MERCADERIA, FECHA_CADUCIDAD FROM MT.MST_OFERTAS_CARGA";
	private static final String sqlCreate = "INSERT INTO (ID, USR_ID, PLT_ID, RMT_ID, CAT_ID, CIU_ORG_ID, CIU_DST_ID, VHT_ID, UNI_ID, FECHA_DESDE, FECHA_HASTA, FECHA_PUBLICACION, DETALLE_CARGA, ELIMINADO, NUMERO_VIAJES, PRECIO_REFERENCIAL, ESPECIFICACION_ENTREGA, MOT_ID, CANTIDAD, MERCADERIA, FECHA_CADUCIDAD) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	private static final String sqlDeleteByPK = "DELETE FROM MT.MST_OFERTAS_CARGA where ID=?";


	private DTOOfertaCarga setDatosRegistro(ResultSet rs) throws SQLException {
		DTOOfertaCarga dto = new DTOOfertaCarga();
		dto.setId(formatInteger(rs.getObject("ID")));
		dto.setIdUsuario(formatInteger(rs.getObject("USR_ID")));
		dto.setIdTipoPlataforma(formatInteger(rs.getObject("PLT_ID")));
		dto.setIdTipoRemolque(formatInteger(rs.getObject("RMT_ID")));
		dto.setIdTipoCarga(formatInteger(rs.getObject("CAT_ID")));
		dto.setIdCiudadOrigen(formatInteger(rs.getObject("CIU_ORG_ID")));
		dto.setIdCiudadDestino(formatInteger(rs.getObject("CIU_DST_ID")));
		dto.setIdTipoVehiculo(formatInteger(rs.getObject("VHT_ID")));
		dto.setIdTipoUnidad(formatInteger(rs.getObject("UNI_ID")));
		dto.setFechaDesde(formatDate(rs.getDate("FECHA_DESDE")));
		dto.setFechaHasta(formatDate(rs.getDate("FECHA_HASTA")));
		dto.setFechaPublicaccion(formatDate(rs.getDate("FECHA_PUBLICACION")));
		dto.setDetalleCarga(formatString(rs.getObject("DETALLE_CARGA")));
		dto.setEliminado(formatString(rs.getObject("ELIMINADO")));
		dto.setNumeroViajes(formatInteger(rs.getObject("NUMERO_VIAJES")));
		dto.setPrecioReferencial(formatInteger(rs.getObject("PRECIO_REFERENCIAL")));
		dto.setEspecificacionEntrega(formatString(rs.getObject("ESPECIFICACION_ENTREGA")));
		dto.setIdTipoMoneda(formatInteger(rs.getObject("MOT_ID")));
		dto.setCantidad(formatInteger(rs.getObject("CANTIDAD")));
		dto.setMercaderia(formatString(rs.getObject("MERCADERIA")));
		dto.setFechaCaducidad(formatDate(rs.getDate("FECHA_CADUCIDAD")));
		return dto;
	}

	public Integer generateId() {
		Parametro[] params = null;
		Integer id = null;
		try {
			getConnection();
			ResultSet rs = executeQuery(sqlGetId, params);
			while (rs.next()) {
				id = formatInteger(rs.getObject("IDX"));
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}
		return id;
	}
	public DTOOfertaCarga findByPrimaryKey(Long id) {

		DTOOfertaCarga dto = new DTOOfertaCarga();
		Parametro[] params = new Parametro[] { getParametro(id, Types.INTEGER)};
		try {
			getConnection();

			ResultSet rs = executeQuery(sqlFindByPK, params);
			while (rs.next()) {
				dto = setDatosRegistro( rs );
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return dto;
	}

	public Collection findAll() {

		Parametro[] params = null;
		Collection col = new LinkedList();
		try {
			getConnection();

			ResultSet rs = executeQuery(sqlFindAll, params);
			while (rs.next()) {
				DTOOfertaCarga dto = setDatosRegistro( rs );
				col.add( dto );
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return col;
	}

	public int deleteByPrimaryKey(Integer id) {

		Parametro[] params = new Parametro[] { getParametro(id, Types.INTEGER)};
		int res = -1;
		try {
			getConnection();
			res = executeUpdate(sqlDeleteByPK, params);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return res;
	}

	public int create(DTOOfertaCarga dto) {

		Parametro[] params = new Parametro[] {
			getParametro(dto.getId(), Types.INTEGER),
			getParametro(dto.getIdUsuario(), Types.INTEGER),
			getParametro(dto.getIdTipoPlataforma(), Types.INTEGER),
			getParametro(dto.getIdTipoRemolque(), Types.INTEGER),
			getParametro(dto.getIdTipoCarga(), Types.INTEGER),
			getParametro(dto.getIdCiudadOrigen(), Types.INTEGER),
			getParametro(dto.getIdCiudadDestino(), Types.INTEGER),
			getParametro(dto.getIdTipoVehiculo(), Types.INTEGER),
			getParametro(dto.getIdTipoUnidad(), Types.INTEGER),
			getParametro(dto.getFechaDesde(), Types.DATE),
			getParametro(dto.getFechaHasta(), Types.DATE),
			getParametro(dto.getFechaPublicaccion(), Types.DATE),
			getParametro(dto.getDetalleCarga(), Types.VARCHAR),
			getParametro(dto.getEliminado(), Types.VARCHAR),
			getParametro(dto.getNumeroViajes(), Types.INTEGER),
			getParametro(dto.getPrecioReferencial(), Types.INTEGER),
			getParametro(dto.getEspecificacionEntrega(), Types.VARCHAR),
			getParametro(dto.getIdTipoMoneda(), Types.INTEGER),
			getParametro(dto.getCantidad(), Types.INTEGER),
			getParametro(dto.getMercaderia(), Types.VARCHAR),
			getParametro(dto.getFechaCaducidad(), Types.DATE)
		};

		int res = -1;
		try {
			getConnection();
			res = executeUpdate(sqlCreate, params);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeConnection();
		}

		return res;
	}



}

